<?php

/**
 * ordendeservicio actions.
 *
 * @package    kernel
 * @subpackage ordendeservicio
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 2288 2006-10-02 15:22:13Z fabien $
 */
class ordendeservicioActions extends autoordendeservicioActions
{

public function executeGenerarPdf()
{
	$id = $this->getRequestParameter('id');
	$pdf = new ReportePdf('P','mm',array(210,135));
	// settings
	$pdf->setLogo('/configuracion/logo-empresa.png');
	$pdf->SetFont("FreeSerif", "", 10);
	$pdf->SetTitulo("Orden de servicio");
	$pdf->Setempresa("5inco - ACC");
	$pdf->SetFillColor(225,225,225);
	$pdf->SetFechaConsulta(date('Y-m-d H:i'));
	$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
	$pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
	$pdf->setFooterFont(array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
	$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
	$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
	// output
	/*$pdf->Output();*/
	$orden_de_servicio = FacturacionOrdenDeServicioPeer::retrieveByPk($id);
	$tercero = $orden_de_servicio->getKernelTercero();
	$ciudad = $orden_de_servicio->getKernelCiudad();
	$coordinador = $orden_de_servicio->getRrhhPersonal();
	$recursos_orden = $orden_de_servicio->getFacturacionOrdenDeServicioARecursosJoinRrhhRecurso();
	$mecanicos_orden = $orden_de_servicio->getFacturacionOrdenDeServicioAPersonalsJoinRrhhPersonal();   
	$productos_orden = $orden_de_servicio->getFacturacionOrdenDeServicioAProductoPresentacionsJoinFacturacionProductoPresentacion();
	$servicios_orden = $orden_de_servicio->getFacturacionOrdenDeServicioAServiciosJoinFacturacionServicio();
	
	$pdf->setDocNumero($orden_de_servicio->getId());//$orden_de_servicio->getId());
	
	// init pdf doc
	$pdf->AliasNbPages();
	$pdf->AddPage();
    //$pdf->Cell(80, 10, "Hello World !!! & é € U û いろは");

	$pdf->Ln(6);
	$y = $pdf->GetY();
	//$pdf->SetX(60);
	$pdf->Cell(80, 20,'',1,0,'L',0);
	$pdf->SetY($y);
	$pdf->Cell(80, 5, "Cliente: ".$tercero,1,0,'L',1);
	$pdf->Ln(); 
	$pdf->Cell(80, 5, "Fecha reporte: ".$orden_de_servicio->getFechaReporte());
	$pdf->Ln(); 
	$pdf->Cell(80, 5, "Dirección de servicio: ".$ciudad.' '.$orden_de_servicio->getDireccionServicio());
	$pdf->Ln();
	$pdf->Cell(80, 5, "Vehiculo: ");
	$pdf->Ln();
	$datos = false;
	$datos[] = array('Coordinador',$coordinador->getKernelTercero()->getNombreCompleto());
	foreach($mecanicos_orden as $mec_ord)
	{
		$tmp = $mec_ord->getRrhhPersonal()->getKernelTercero();
		$datos[] = array('Mecanico',$tmp->getNombre());
	}
	$pdf->setTitulos(array('Cargo','Nombre'));
	$pdf->setTablaCuerpoFont(10);
	$tmp = array(array(20,'L'),array(70,'L'));
	$pdf->setDimensiones($tmp);
	$pdf->setRgbFancyTable(array(225,225,225));
	$pdf->fancyTable($datos, 100, $y);
	$pdf->Ln();
	$y = $pdf->GetY();
	
	$datos=false;
	foreach($servicios_orden as $serv_ord)
	{
		$tmp = $serv_ord->getFacturacionServicio();
		$datos[] = array('Servicio.',$tmp->getId(),$tmp->getNombre());
	}
	
	foreach($productos_orden as $prod_ord)
	{
		$tmp = $prod_ord->getFacturacionProductoPresentacion()->getFacturacionProducto();
		$datos[] = array('Producto.',$tmp->getId(),$tmp->getNombre());
	}
	if ($datos)
	{
		$pdf->setTitulos(array('Tipo','Codigo','Concepto'));
		$tmp = array(array(20,'L'),array(20,'L'),array(135,'L'));
		$pdf->setDimensiones($tmp);
		$x = $pdf->getX();
		$y = $pdf->getY();
		$pdf->fancyTable($datos, $x, $y);
	}
	if ($datos) {unset($datos);}
	$pdf->Ln();
	
	$pdf->Cell(80, 10, "Recursos: ");
	$pdf->Ln();
	$K = 0;
	foreach($recursos_orden as $rec_ord)
	{
		$K++;
		$pdf->Cell(80, 10, $K .")".$rec_ord->getRrhhRecurso() . ' ');
		$pdf->Ln();
	}
	if ($orden_de_servicio->getObservaciones())
	{
		$pdf->Cell(80, 10, "Observaciones: ".$orden_de_servicio->getObservaciones());
	}
	else
	{
		$pdf->Cell(175, 5, "Observaciones:",'B');
		$pdf->Ln();
		$pdf->Cell(175, 5, "",'B');
		$pdf->Ln();
		$pdf->Cell(175, 5, "",'B');
		$pdf->Ln();
	}
	$pdf->Output();
	return sfView::NONE;
}

  public function saveFacturacionOrdenDeServicio($facturacion_orden_de_servicio)
  {
    $estado = $facturacion_orden_de_servicio->save();

      // Update many-to-many for "orden_de_servicio_a_personal"
      $c = new Criteria();
      $c->add(FacturacionOrdenDeServicioAPersonalPeer::ORDEN_DE_SERVICIO_ID, $facturacion_orden_de_servicio->getPrimaryKey());
      FacturacionOrdenDeServicioAPersonalPeer::doDelete($c);

      $ids = $this->getRequestParameter('associated_orden_de_servicio_a_personal');
      if (is_array($ids))
      {
        foreach ($ids as $id)
        {
          $FacturacionOrdenDeServicioAPersonal = new FacturacionOrdenDeServicioAPersonal();
          $FacturacionOrdenDeServicioAPersonal->setOrdenDeServicioId($facturacion_orden_de_servicio->getPrimaryKey());
          $FacturacionOrdenDeServicioAPersonal->setPersonalId($id);
          $FacturacionOrdenDeServicioAPersonal->save();
        }
      }

      // Update many-to-many for "servicio_por_orden"
      /*$c = new Criteria();
      $c->add(FacturacionServicioPorOrdenPeer::ORDEN_DE_SERVICIO_ID, $facturacion_orden_de_servicio->getPrimaryKey());
      FacturacionServicioPorOrdenPeer::doDelete($c);

      $ids = $this->getRequestParameter('associated_servicio_por_orden');
      if (is_array($ids))
      {
        foreach ($ids as $id)
        {
          $FacturacionServicioPorOrden = new FacturacionServicioPorOrden();
          $FacturacionServicioPorOrden->setOrdenDeServicioId($facturacion_orden_de_servicio->getPrimaryKey());
          $FacturacionServicioPorOrden->setServicioId($id);
          $FacturacionServicioPorOrden->save();
        }
      }
      */
      // Update many-to-many for "orden_de_servicio_a_recurso"
      $c = new Criteria();
      $c->add(FacturacionOrdenDeServicioARecursoPeer::ORDEN_DE_SERVICIO_ID, $facturacion_orden_de_servicio->getPrimaryKey());
      FacturacionOrdenDeServicioARecursoPeer::doDelete($c);

      $ids = $this->getRequestParameter('associated_orden_de_servicio_a_recurso');
      if (is_array($ids))
      {
        foreach ($ids as $id)
        {
          $FacturacionOrdenDeServicioARecurso = new FacturacionOrdenDeServicioARecurso();
          $FacturacionOrdenDeServicioARecurso->setOrdenDeServicioId($facturacion_orden_de_servicio->getPrimaryKey());
          $FacturacionOrdenDeServicioARecurso->setRecursoId($id);
          $FacturacionOrdenDeServicioARecurso->save();
        }
      }
      //billbravo: many-to-many for "servicio_por_orden"
      //billbravo: Borro los muchos a muchos existentes
      $servicios_por_orden = $facturacion_orden_de_servicio->getFacturacionOrdenDeServicioAServiciosJoinFacturacionServicio();
      foreach($servicios_por_orden as $spo)
        $spo->delete();
      
      //billbravo: 
      if(count($this->getRequestParameter('servicio')) > 0)
      {
        $servicios_por_orden = $this->getRequestParameter('servicio');
        foreach ( $servicios_por_orden as $servicio_cantidad)
        {
          $tmp = explode('~',$servicio_cantidad);
          $servicio_id = $tmp[0];
          $cantidad = intval($tmp[1]);
          $servicio = FacturacionServicioPeer::retrieveByPK($servicio_id);
          $facturacionServicioPorOrden = new FacturacionOrdenDeServicioAServicio();
          $facturacionServicioPorOrden->setServicioId($servicio_id);
          $facturacionServicioPorOrden->setOrdenDeServicioId($facturacion_orden_de_servicio->getId());
          $facturacionServicioPorOrden->setCantidad($cantidad);
          $facturacionServicioPorOrden->setValorUnidad($servicio->getPrecio());
          $facturacionServicioPorOrden->setTotal($cantidad*$servicio->getPrecio());
          $facturacionServicioPorOrden->save();
        }
      }
      
      //billbravo: many-to-many for "orden_de_servicio_presentacion"
      //billbravo: Borro los muchos a muchos existentes
      $presentaciones_por_orden = $facturacion_orden_de_servicio->getFacturacionOrdenDeServicioAProductoPresentacionsJoinFacturacionProductoPresentacion();
      foreach($presentaciones_por_orden as $ppo)
        $ppo->delete();      
      if(count($this->getRequestParameter('presentacion')) > 0)
      {
        $productos_por_orden = $this->getRequestParameter('presentacion');
        foreach ( $productos_por_orden as $presentacion_cantidad)
        {
          $tmp = explode('~',$presentacion_cantidad);
          $presentacion_id = $tmp[0];
          $cantidad = intval($tmp[1]);
          $presentacion = FacturacionProductoPresentacionPeer::retrieveByPK($presentacion_id);
          $facturacionOrdenDeServicioPresentacion = new FacturacionOrdenDeServicioAProductoPresentacion();
          $facturacionOrdenDeServicioPresentacion->setPresentacionId($presentacion_id);
          $facturacionOrdenDeServicioPresentacion->setOrdenDeServicioId($facturacion_orden_de_servicio->getId());
          $facturacionOrdenDeServicioPresentacion->setCantidad($cantidad);
          $facturacionOrdenDeServicioPresentacion->setValorUnidad($presentacion->getPrecio());
          $facturacionOrdenDeServicioPresentacion->setTotal($cantidad*$presentacion->getPrecio());
          $facturacionOrdenDeServicioPresentacion->save();
        }
      }
      
    return $estado;
  }
  
  protected function addFiltersCriteria($c)
  {
  

     if (isset($this->filters['cedula']) && $this->filters['cedula'] !== '')
      {
      $c->addJoin(KernelTerceroPeer::ID, FacturacionOrdenDeServicioPeer::TERCERO_ID);
      $c->add(KernelTerceroPeer::IDENTIFICACION, $this->filters['cedula']);
    }
    
    if (isset($this->filters['fecha_reporte_is_empty']))
    {
      $criterion = $c->getNewCriterion(FacturacionOrdenDeServicioPeer::FECHA_REPORTE, '');
      $criterion->addOr($c->getNewCriterion(FacturacionOrdenDeServicioPeer::FECHA_REPORTE, null, Criteria::ISNULL));
      $c->add($criterion);
    }
    else if (isset($this->filters['fecha_reporte']))
    {
      if (isset($this->filters['fecha_reporte']['from']) && $this->filters['fecha_reporte']['from'] !== '')
      {
        $criterion = $c->getNewCriterion(FacturacionOrdenDeServicioPeer::FECHA_REPORTE, $this->filters['fecha_reporte']['from'], Criteria::GREATER_EQUAL);
      }
      if (isset($this->filters['fecha_reporte']['to']) && $this->filters['fecha_reporte']['to'] !== '')
      {
        if (isset($criterion))
        {
          $criterion->addAnd($c->getNewCriterion(FacturacionOrdenDeServicioPeer::FECHA_REPORTE, $this->filters['fecha_reporte']['to'], Criteria::LESS_EQUAL));
        }
        else
        {
          $criterion = $c->getNewCriterion(FacturacionOrdenDeServicioPeer::FECHA_REPORTE, $this->filters['fecha_reporte']['to'], Criteria::LESS_EQUAL);
        }
      }

      if (isset($criterion))
      {
        $c->add($criterion);
      }
    }
  }
  
}
